#ifndef __EVENTFD_H__
#define __EVENTFD_H__

#include <functional>

using std::function;
using std::bind;

class EventFd
{
    using EventFdCallback = function<void()>;
public:
    EventFd(EventFdCallback &&cb);
    ~EventFd();

    //启动或者停止
    void start();
    void stop();
    //唤醒（也就是封装了write）
    void wakeup();
private:
    //封装了read函数
    void handleRead();
    //创建用于通信的文件描述符
    int createEventFd();

private:
    int _evtfd;//由eventfd创建的用于通信的文件描述符
    EventFdCallback _cb;//需要执行的任务
    bool _isStarted;//起到标识


};

#endif
